/*
 * @Author: szx
 * @Date: 2021-10-28 19:43:13
 * @LastEditTime: 2021-10-28 20:01:58
 * @Description:
 * @FilePath: \leetcode\283\283.cpp
 */
#include <iostream>
#include <vector>
using namespace std;
// class Solution {
//    public:
//     void moveZeroes(vector<int>& nums) {
//         int p = 0;
//         int isZero = false;
//         for (int i = 0; i < nums.size(); i++) {
//             if (nums[i] == 0 && !isZero) {
//                 isZero = true;
//                 p = i;
//             }
//             else if (nums[i] != 0 && isZero) {
//                 nums[p] = nums[i];
//                 p++;
//             }
//         }
//         if (!isZero) {
//             return;
//         }
//         for (int i = p; i < nums.size(); i++) {
//             nums[i] = 0;
//         }
//     }
// };
class Solution {
   public:
    void moveZeroes(vector<int>& nums) {
        int index = 0;
        for (int& num : nums) {
            if (num != 0) {
                nums[index++] = num;
            }
        }
        for (int i = index; i < nums.size(); i++) {
            nums[i] = 0;
        }
    }
};

class Solution {
   public:
    void moveZeroes(vector<int>& nums) {
        int n = nums.size(), index = 0;
        for (int i = 0; i < n; i++) {
            if (nums[i]) {
                swap(nums[index], nums[i]);
                index++;
            }
        }
    }
};

int main() {
    Solution s;
    vector<int> v = {2, 1};
    s.moveZeroes(v);
    for (int& i : v) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}